﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Text.RegularExpressions;

namespace Sistema.Dominio
{
    public class Validador
    {
        public bool ValidarCpf(String cpf)
        {
            int[] multiplicador1 = new int[9] { 10, 9, 8, 7, 6, 5, 4, 3, 2 };

            int[] multiplicador2 = new int[10] { 11, 10, 9, 8, 7, 6, 5, 4, 3, 2 };

            string tempCpf;

            string digito;

            int soma;

            int resto;

            cpf = cpf.Numeros();

            if (cpf.Length != 11)

                return false;

            tempCpf = cpf.Substring(0, 9);

            soma = 0;

            for (int i = 0; i < 9; i++)

                soma += int.Parse(tempCpf[i].ToString()) * multiplicador1[i];

            resto = soma % 11;

            if (resto < 2)

                resto = 0;

            else

                resto = 11 - resto;

            digito = resto.ToString();

            tempCpf = tempCpf + digito;

            soma = 0;

            for (int i = 0; i < 10; i++)

                soma += int.Parse(tempCpf[i].ToString()) * multiplicador2[i];

            resto = soma % 11;

            if (resto < 2)

                resto = 0;

            else

                resto = 11 - resto;

            digito = digito + resto.ToString();

            return cpf.EndsWith(digito);

        }

        public bool ValidarCnpj(String cnpj)
        {

            int[] multiplicador1 = new int[12] { 5, 4, 3, 2, 9, 8, 7, 6, 5, 4, 3, 2 };

            int[] multiplicador2 = new int[13] { 6, 5, 4, 3, 2, 9, 8, 7, 6, 5, 4, 3, 2 };

            int soma;

            int resto;

            string digito;

            string tempCnpj;

            cnpj = cnpj.Numeros();

            if (cnpj.Length != 14)

                return false;

            tempCnpj = cnpj.Substring(0, 12);

            soma = 0;

            for (int i = 0; i < 12; i++)

                soma += int.Parse(tempCnpj[i].ToString()) * multiplicador1[i];

            resto = (soma % 11);

            if (resto < 2)

                resto = 0;

            else

                resto = 11 - resto;

            digito = resto.ToString();

            tempCnpj = tempCnpj + digito;

            soma = 0;

            for (int i = 0; i < 13; i++)

                soma += int.Parse(tempCnpj[i].ToString()) * multiplicador2[i];

            resto = (soma % 11);

            if (resto < 2)

                resto = 0;

            else

                resto = 11 - resto;

            digito = digito + resto.ToString();

            return cnpj.EndsWith(digito);

        }

        public bool ValidarCep(String Cep)
        {
            Regex Rgx = new Regex(@"^\d{2}[.]{1}\d{3}-\d{3}$");
            return Rgx.IsMatch(Cep);
        }

        public bool ValidarTelefone(String Numero)
        {

            Regex rgx = new Regex(@"^[(]{1}\d{2}[)]{1}\d{4}[-]{1}\d{4}$");
            return rgx.IsMatch(Numero);    
        }

        public bool ValidarRg(string rg)
        {
            //Elimina da string os traços, pontos e virgulas,
            rg = rg.Numeros();

            //Verifica se o tamanho da string é 9
            if (rg.Length == 9)
            {
                return true; 
            }
            else
            {
                return false;
            }
        }

        public bool ValidarEmail(string email)
        {
            Regex rg = new Regex(@"^[A-Za-z0-9](([_\.\-]?[a-zA-Z0-9]+)*)@([A-Za-z0-9]+)(([\.\-]?[a-zA-Z0-9]+)*)\.([A-Za-z]{2,})$");
            return rg.IsMatch(email);
        }
    }
    public static class StringExtensions
    {
        public static String Numeros(this String n)
        {
            String lnNova = "";
            String soNumero = "0123456789";
            String Item;

            for (int i = 0; i <= n.Length - 1; i++)
            {
                Item = n.Substring(i, 1);
                for (int j = 0; j <= soNumero.Length - 1; j++)
                {
                    if (soNumero.Substring(j, 1) == Item)
                    {
                        //Se for um numero item recebe o caracter
                        lnNova = lnNova.ToString() + Item;
                    }
                }
            }
            //Retorna a nova linha
            return lnNova;
        }
    }
}
